Business enterprise software is computer software created to support the needs of most enterprise activities. Examples of enterprise software activities are functions such as accounting, shipping and receiving, billing, customer tracking and similar activities. The development of large-scale enterprise software has become a huge undertaking because of the complexity of the software.
Enterprise software development has evolved into a plateau of assorted development techniques. These software development techniques are mainly rooted in the approach of matching an enterprise activity or a group of common activities to one or more computer instructions called programs. These programs are usually stored on a data storage device such as a hard disk associated with a computer system. Programs can be extracted and loaded into a computer's memory to perform and/or support specific enterprise activities. The purpose of these programs is to specifically address one or more enterprise activities.
Usually one program or group of programs is intended to address one or more related enterprise activities. For example, if an enterprise wants to enter and maintain customer information on a computer system, a program or a set of programs must be developed to support this specific activity. Thus, one or more programs may be required to support the customer entry and maintenance activity.
To address enterprise activities and processes, the software development industry uses multiple techniques in the development of enterprise software. The following list describes some typical software development techniques used by the enterprise software development industry. These techniques may include:    1. Developing a full set of enterprise applications consisting of many programs, where each program is uniquely designed to generally match one enterprise activity.    2. Developing and/or using a set of reusable programs, sometimes referred to as a framework. Using these reusable programs as building blocks allows an enterprise to develop and support more sophisticated programs for enterprise activities.    3. Generating and storing a program or a set of programs using software generation tools. These tools may be referred to as Computer Aided Software Engineering (CASE) tools. Enterprises may further refine or extend these generated programs to support an enterprise activity or group of related enterprise activities.    4. Developing applications using high level computer languages like query languages or fourth generation languages to match programs with enterprise activities.The enterprise software development industry currently uses one or more of these development techniques to create enterprise software applications.
There are generally two trends in the software development industry. One trend is the development of software programs using reusable software programs, methods or components. This reusable software is often developed for repetitive user interface and data processing activities. Another trend is the use of software development tools, which generate programs. These trends have reduced the volume and size of some programs, but have added complexity to the programming environment. This complexity comes from the complicated nature of frameworks, CASE tools and the management of reusable programs.
Regardless of these trends or the computer languages used, the need to match a program or programs to a specific activity is still the central element in nearly all enterprise software applications today. Due to the number of enterprise activities, there are an overwhelming number of programs. The storing of customer information is just one of thousands of enterprise activities requiring specifically written programs. The number of possible enterprise activities requiring automation is growing at an exponential rate.
As a result, there has been a growing enterprise software crisis. This crisis is due to the increasing difficulty of developing software fast enough to keep pace with enterprise demands and the confusion and complexity created from the ever-changing and developing computer methodologies and technology. This crisis is characterized by the complexity, persistent defects and the cost overruns involved in maintaining and modifying the vast and interrelated software programs developed for business enterprises.
At the core of the enterprise software crisis is the volume, size and complexity of programs packaged into software applications. Since the number of enterprise activities may continue to increase, so will the number of programs. To complicate matters even further, the computer industry is exponentially adding more computer languages, software tools, methodologies and applications to address all of the required enterprise activities and processes.
Most enterprises acquire multiple software applications to address all of their activities. This means most enterprises must maintain multiple software applications. Each software application may be written in multiple computer languages utilizing multiple development tools with thousands of programs. The challenge is to understand, integrate and maintain all of these software applications. Today most enterprises must understand multiple operating environments, computer languages, databases, development tools and software applications—an overwhelming task for any enterprise. All of this continues to complicate, confuse and increase the expense of automating an enterprise. The result is software overload and excessive costs.
The following list highlights some of the software overload problems:    1. Software Repetition. Most software applications contain programming repetition for user interfaces data retrieval, relational connections, data validations, data processing and the display of data and/or objects. Programming repetition is where the same computer instruction(s) is repeated and stored in more than one program. The object-oriented programming methodology was designed to address this concern by compartmentalizing and reusing software. The object-oriented industry and various software development tools have tried to alleviate this problem, but with limited success mainly due to the difficulties involved with communicating between objects. The volume, size and complexity of programs under the surface of most applications is still overwhelming and unnecessary because of software repetition.    2. Inconsistent User Interfaces. User navigation systems and interfaces vary significantly within most enterprise software applications. Most older enterprise software applications already had significant variations between automated activities. To make matters even worse, the race to a graphical user interface (GUI) followed by the Web industry has resulted in even more user navigation systems and interfaces. This has resulted in confusion at the user level because of the volume of ways to view, enter, and maintain data. Inconsistent user interfaces and navigation differences increase the length of time to learn and implement software applications. To alleviate this problem, the software development industry is using development tools, frameworks, programming standards, software development methodologies, and development discipline. Regardless of all of these efforts, inconsistent user interfaces and navigation systems will persist because every developer is independent and unique. This means the variations will continue to multiply.    3. Rigid Software. Most software applications are rigid and difficult to enhance, alter or customize. Because of the size and complexity of software applications, the customization or enhancement of these applications is an expensive and difficult process. The software industry has found it difficult to provide a software application with every possible enterprise activity for every enterprise. In addition, a software application with every possible enterprise activity involves a massive software application, which is the direction and problem of the enterprise software industry today. The current trend in the enterprise software industry is to require users to adapt to the software application business processes because of the danger and complexity of altering the software. However, each enterprise will continue to have unique activities and will continue to desire to support these activities by altering or enhancing the software.    4. High Cost and Effort to Upgrade Software. Due to the volume, size and complexity of most software applications, the upgrade process is difficult, time consuming, costly and disruptive to business. Added on top of this is the complexity of customizing and enhancing the software, which adds additional complexity when upgrading software applications. The cost and effort to upgrade software applications is so large and disruptive, some enterprises will avoid an upgrade as long as possible and choose to be without support.    5. Technology Catch-Up. The computer software industry has undergone a tremendous amount of change. The industry has gone from character, client-server, GUI, to the Web in a relatively short period. Because of the volume, size and complexity of most software applications, the development efforts to keep up with an ever-evolving technology are prohibitive or very costly. Some software companies have kept up with the rapid change, but have unstable products due to the rapid re-write and re-deployment of their products. This instability along with the costs to re-write software applications are passed on to the consumer. Many enterprises spend excessive time and money debugging and stabilizing the buggy products they use in order to survive. Quality and cost will continue to suffer in this race.    6. Software Scalability. Smaller enterprises or businesses cannot afford to purchase and implement large software applications. The volume, size and complexity of large software applications, requires too many resources. Instead, smaller software applications are selected with limited functionality. However, these smaller software applications do not have the functionality or resources to address all possible future enterprise activities and technology requirements. Also, smaller software application developers do not have the resources to keep up with the industry. When an enterprise grows or the computer industry changes, companies must throw out smaller and/or obsolete software applications just to keep up with technology and its own needs. This process is expensive and disruptive to business.
A significant part of these problems is the varying design and communications between programs. The lack of discipline and standards in the enterprise software development industry is also a problem. Regardless of the number of standards and the level of discipline, the fact will always remain—the approach, method, output, structure and communication between programs will always vary between developers. Since each developer is unique, the programs created by different developers will be unique. Communication can be difficult between co-workers on simple matters, and this effect is often amplified between software developers on more complex technical matters. Therefore, the required communication and output for a program will always vary between developers. Communication will continue to be a large issue in the problems listed above. None of the problems discussed above can be resolved unless there is a new approach to software development and deployment.